home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 80 / XENIATGM80.iso / Goodies / Blood 2 / Source / data.z / MenuSound.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1999-04-02  |  5.3 KB  |  226 lines

  1. // MenuSound.cpp: implementation of the CMenuSound class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4.  
  5. #include "MenuBase.h"
  6. #include "MainMenus.h"
  7. #include "MenuSound.h"
  8. #include "MenuCommands.h"
  9. #include "BloodClientShell.h"
  10. #include "ClientRes.h"
  11.  
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15.  
  16. CMenuSound::CMenuSound()
  17. {
  18.     m_bSoundOn=DFALSE;
  19.     m_bMusicOn=DFALSE;
  20.     m_nSoundVolume=50;
  21.     m_nMusicVolume=50;
  22.     m_bSoundQuality=DFALSE;
  23.     m_bOldSoundQuality = DFALSE;
  24.  
  25.     m_pSoundVolumeCtrl=DNULL;
  26.     m_pMusicVolumeCtrl=DNULL;
  27.     m_pSoundQualityCtrl=DNULL;
  28. }
  29.  
  30. CMenuSound::~CMenuSound()
  31. {
  32.  
  33. }
  34.  
  35. // Build the menu
  36. void CMenuSound::Build()
  37. {
  38.     // Make sure to call the base class
  39.     CMenuBase::Build();
  40.  
  41.     CreateTitle("interface\\mainmenus\\options.pcx", IDS_MENU_TITLE_OPTIONS, m_pMainMenus->GetTitlePos());        
  42.     SetOptionPos(m_pMainMenus->GetOptionsPos());
  43.     SetItemSpacing(5);
  44.     SetScrollWrap(DFALSE);    
  45.  
  46.     AddOnOffOption(IDS_MENU_AUDIO_SOUND, m_pMainMenus->GetSmallFont(), 100, &m_bSoundOn);    
  47.  
  48.     m_pSoundVolumeCtrl=AddSliderOption(IDS_MENU_AUDIO_SOUND_VOLUME, m_pMainMenus->GetSmallFont(), 100, m_pMainMenus->GetSurfaceSliderBar(), m_pMainMenus->GetSurfaceSliderTab(), &m_nSoundVolume);
  49.     m_pSoundQualityCtrl=AddOnOffOption(IDS_MENU_AUDIO_16BIT_SOUND, m_pMainMenus->GetSmallFont(), 100, &m_bSoundQuality);
  50.  
  51.     AddOnOffOption(IDS_MENU_AUDIO_MUSIC, m_pMainMenus->GetSmallFont(), 100, &m_bMusicOn);
  52.  
  53.     m_pMusicVolumeCtrl=AddSliderOption(IDS_MENU_AUDIO_MUSIC_VOLUME, m_pMainMenus->GetSmallFont(), 100, m_pMainMenus->GetSurfaceSliderBar(), m_pMainMenus->GetSurfaceSliderTab(), &m_nMusicVolume);
  54.  
  55.     if ( m_pSoundVolumeCtrl )
  56.     {
  57.         m_pSoundVolumeCtrl->SetSliderRange(0, 50);
  58.         m_pSoundVolumeCtrl->SetSliderIncrement(5);
  59.     }
  60.     if ( m_pMusicVolumeCtrl )
  61.     {
  62.         m_pMusicVolumeCtrl->SetSliderRange(0, 50);
  63.         m_pMusicVolumeCtrl->SetSliderIncrement(5);
  64.     }
  65.  
  66.     // Load the sound settings
  67.     LoadSoundSettings();    
  68.     UpdateData(DFALSE);    
  69.  
  70.     // Enable/Disable the volume controls based on m_bSoundOn and m_bMusicOn
  71.     EnableDisableControls();
  72. }
  73.  
  74. // Enable/Disable the volume controls based on m_bSoundOn and m_bMusicOn
  75. void CMenuSound::EnableDisableControls()
  76. {
  77.     if ( !m_bSoundOn )
  78.     {
  79.         if ( m_pSoundVolumeCtrl )
  80.         {
  81.             m_pSoundVolumeCtrl->Enable(DFALSE);
  82.             m_pSoundQualityCtrl->Enable(DFALSE);
  83.         }    
  84.     }
  85.     else
  86.     {
  87.         if ( m_pSoundVolumeCtrl )
  88.         {
  89.             m_pSoundVolumeCtrl->Enable(DTRUE);
  90.             m_pSoundQualityCtrl->Enable(DTRUE);
  91.         }    
  92.     }
  93.  
  94.     if ( !m_bMusicOn )
  95.     {
  96.         if ( m_pMusicVolumeCtrl )
  97.         {
  98.             m_pMusicVolumeCtrl->Enable(DFALSE);
  99.         }    
  100.     }
  101.     else
  102.     {
  103.         if ( m_pMusicVolumeCtrl )
  104.         {
  105.             m_pMusicVolumeCtrl->Enable(DTRUE);
  106.         }    
  107.     }
  108. }
  109.  
  110. // Load the sound settings
  111. void CMenuSound::LoadSoundSettings()
  112. {
  113.     // Load the sound/music on/off console variables
  114.     HCONSOLEVAR hVar=m_pClientDE->GetConsoleVar("soundenable");
  115.     if (hVar && m_pClientDE->GetVarValueFloat(hVar) == 1.0f)
  116.     {
  117.         m_bSoundOn=DTRUE;
  118.     }
  119.     else
  120.     {
  121.         m_bSoundOn=DFALSE;
  122.     }
  123.  
  124.     hVar=m_pClientDE->GetConsoleVar("musicenable");
  125.     if (hVar && m_pClientDE->GetVarValueFloat(hVar) == 1.0f)
  126.     {
  127.         m_bMusicOn=DTRUE;
  128.     }
  129.     else
  130.     {
  131.         m_bMusicOn=DFALSE;
  132.     }
  133.  
  134.     hVar=m_pClientDE->GetConsoleVar("soundvolume");
  135.     if (hVar)
  136.     {
  137.         m_nSoundVolume=(int)m_pClientDE->GetVarValueFloat(hVar);
  138.     }    
  139.  
  140.     hVar=m_pClientDE->GetConsoleVar("musicvolume");
  141.     if (hVar)
  142.     {
  143.         m_nMusicVolume=(int)m_pClientDE->GetVarValueFloat(hVar);
  144.     }        
  145.  
  146.     hVar=m_pClientDE->GetConsoleVar("sound16bit");
  147.     if (hVar)
  148.     {
  149.         m_bOldSoundQuality = m_bSoundQuality=(m_pClientDE->GetVarValueFloat(hVar) == 0.0f) ? DFALSE : DTRUE;
  150.     }        
  151. }
  152.  
  153. // Save the sound settings
  154. void CMenuSound::SaveSoundSettings()
  155. {
  156.     UpdateData(DTRUE);
  157.  
  158.     if ( m_bSoundOn )
  159.     {
  160.         m_pClientDE->RunConsoleString("+soundenable 1");
  161.     }
  162.     else
  163.     {
  164.         m_pClientDE->RunConsoleString("+soundenable 0");
  165.     }
  166.  
  167.     if ( m_bMusicOn )
  168.     {
  169.         m_pClientDE->RunConsoleString("+musicenable 1");
  170.     }
  171.     else
  172.     {
  173.         m_pClientDE->RunConsoleString("+musicenable 0");
  174.     }
  175.  
  176.     char szTemp[256];
  177.     memset(szTemp, 0, sizeof(szTemp));
  178.     sprintf(szTemp, "+soundvolume %f", (float)m_nSoundVolume);
  179.     m_pClientDE->RunConsoleString(szTemp);
  180.  
  181.     memset(szTemp, 0, sizeof(szTemp));
  182.     sprintf(szTemp, "+musicvolume %f", (float)m_nMusicVolume);
  183.     m_pClientDE->RunConsoleString(szTemp);
  184.  
  185.     memset(szTemp, 0, sizeof(szTemp));
  186.     sprintf(szTemp, "+sound16bit %f", (m_bSoundQuality) ? 1.0f : 0.0f);
  187.     m_pClientDE->RunConsoleString(szTemp);
  188.  
  189.     m_pClientDE->SetSoundVolume(m_nSoundVolume);
  190.     m_pClientDE->SetMusicVolume(m_nMusicVolume);
  191.  
  192.     // Enable/Disable the volume controls based on m_bSoundOn and m_bMusicOn
  193.     EnableDisableControls();
  194. }
  195.  
  196. // Override the left and right controls so that the volumes can be changed
  197. void CMenuSound::OnLeft()
  198. {
  199.     CMenuBase::OnLeft();
  200.  
  201.     SaveSoundSettings();
  202. }
  203.  
  204. void CMenuSound::OnRight()
  205. {
  206.     CMenuBase::OnRight();
  207.  
  208.     SaveSoundSettings();
  209. }
  210.  
  211. DDWORD CMenuSound::OnCommand(DDWORD dwCommand, DDWORD dwParam1, DDWORD dwParam2)
  212. {    
  213.     return 0;
  214. }
  215.  
  216. // The focus has changed
  217. void CMenuSound::OnFocus(DBOOL bFocus)
  218. {
  219.     if (!bFocus)
  220.     {
  221.         // Only need to reinit sounds if quality changes.
  222.         if( m_bOldSoundQuality != m_bSoundQuality )
  223.             g_pBloodClientShell->InitSound();
  224.     }
  225. }
  226.